package com.winner.data.util;

import cn.hutool.crypto.digest.DigestUtil;

/**
 * 使用了Hutool中的DigestUtil类来计算字符串的MD5、SHA-1和SHA-256哈希值
 *
 * 哈希碰撞：虽然哈希算法设计上尽量避免碰撞（两个不同的数据产生相同的哈希值），但是不可能完全避免。因此，使用哈希值作为唯一标识时要确保碰撞概率足够低，
 * 尤其是使用 MD5 这样的常见算法时，如果数据集非常大，
 * 可以考虑使用更强的哈希算法（如 SHA-256)
 *
 * @Author wangxinle5
 * @since 2025-01-06
 */
public class HashUtil {

    public static void main(String[] args) {
        // 入参字符串不变, 则每次计算的hash值是一样的
        String input = null;
        // 计算 MD5 哈希值, 长度32位
        String md5Hash = DigestUtil.md5Hex(input);
        System.out.println("MD5: " + md5Hash);
        // 计算 SHA-1 哈希值
        String sha1Hash = DigestUtil.sha1Hex(input);
        System.out.println("SHA-1 hash值为：" + sha1Hash);

        // 计算 SHA-256 哈希值 长度64位
        String sha256Hash = DigestUtil.sha256Hex(input);
        System.out.println("SHA-256 hash值为：" + sha256Hash);

    }
}
